跳到主要内容

NC105 二分查找-II

https://www.nowcoder.com/practice/4f470d1d3b734f8aaf2afb014185b395

这题

func search(nums []int, target int) int {
if nums == nil || len(nums) == 0 {
return -1
}

var left, right = 0, len(nums) - 1
for right >= left {
mid := (right - left) / 2 + left
if nums[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}

if nums[left] != target {
return -1
}

return left
}

稍微改下(上面那种居然也能过...):

func search(nums []int, target int) int {
if nums == nil || len(nums) == 0 {
return -1
}

var left, right, mid = 0, len(nums) - 1, 0
for right >= left {
mid = (right-left)/2 + left
if nums[mid] < target {
left = mid + 1
} else if nums[mid] > target {
right = mid - 1
} else {
// 找到最左
for mid-1 >= 0 && nums[mid-1] == target {
mid--
}

return mid
}
}

return -1
}